iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
佛心分享-IT 人自學之術

30天轉職馬拉松:從0到Offer的學習計畫系列 第 12

系統基礎知識II:如何避免系統在網路上裸奔?

  • 分享至 

  • xImage
  •  


隨著網路威脅日漸複雜,確保我們的系統和資料安全是不可或缺的。本文將探討兩個對後端開發極為重要的安全概念:檔案權限管理和SSH(Secure Shell)。這些工具和技術不僅能幫助我們建立更安全的系統,還能在面對潛在威脅時提供有效的防禦機制。

檔案權限管理

檔案權限的重要性

檔案權限是Unix/Linux系統安全的關鍵。它們提供了一種機制,可以精確控制誰可以存取、修改或執行系統中的文件和目錄。正確的檔案權限設置可以:

  1. 保護敏感資料免受未授權存取
  2. 防止重要系統文件被意外或惡意變更
  3. 限制某些使用者或程式的操作範圍
  4. 有助於維護系統的整體穩定性和安全性

檔案權限的基本概念

在Unix/Linux系統中,每個文件和目錄都有三種基本權限:

  • 讀取(Read, r):允許查看文件內容或列出目錄中的文件
  • 寫入(Write, w):允許修改文件或在目錄中創建、刪除文件
  • 執行(Execute, x):允許執行文件或存取目錄

這些權限分別應用於三類使用者:

  • 所有者(Owner):文件或目錄的創建者
  • 群組(Group):與文件關聯的使用者組
  • 其他人(Others):不屬於所有者或群組的所有其他使用者

chmod

chmod(change mode)是用來修改文件或目錄權限的命令。以下是常見的使用方式:

使用三個數字來表示權限,每個數字分別代表擁有者、群組和其他使用者的權限。

  • 4:代表讀取權限 (r)
  • 2:代表寫入權限 (w)
  • 1:代表執行權限 (x)

透過數字相加來表示不同組合權限:

  • 7 (4+2+1) 表示讀取 + 寫入 + 執行
  • 6 (4+2) 表示讀取 + 寫入
  • 5 (4+1) 表示讀取 + 執行
  • 4 表示只有讀取權限
  • 0 表示無權限

例如:

chmod 755 script.sh # 所有者可讀寫執行,群組和其他人可讀和執行
chmod 644 config.txt # 所有者可讀寫,群組和其他人只能讀取
chmod 400 id_rsa # 只有所有者可讀取,常用於保護私鑰文件

常見權限設置及其應用場景

  • 755(rwxr-xr-x):常用於可執行檔案或腳本
    例如:chmod 755 /home/user/scripts/backup.sh
  • 644(rw-r--r--):常用於設定檔案或普通文字檔案
    例如:chmod 644 /etc/ssh/sshd_config
  • 700(rwx------):用於只允許擁有者存取的腳本或目錄
    例如:chmod 700 /home/user/.ssh
  • 600(rw-------):用於只允許擁有者讀寫的敏感檔案,如 SSH 私鑰
    例如:chmod 600 /home/user/.ssh/id_rsa
  • 400(r--------):用於只允許擁有者讀取的高度敏感檔案,如 SSH 公鑰
    例如:chmod 400 /home/user/secrets/encryption_key.pem

SSH簡介

SSH的重要性和基本概念

SSH(Secure Shell)是一種加密的網路協定,用於在不安全的網路中安全地執行網路服務。它主要用於遠端登入和命令執行,但也支援通道、埠號轉發和文件傳輸等功能。

SSH的主要用途

  1. 安全的遠端系統管理
  2. 安全文件傳輸(使用scp或sftp)
  3. 埠號轉發和通道
  4. 安全的應用程式資料傳輸

SSH常見的用法

  1. 基本連接:
    ssh username@hostname
    
  2. 使用非標準埠號:
    ssh -p 2222 username@hostname
    
  3. 使用私鑰認證:
    ssh -i /path/to/private_key username@hostname
    
  4. 執行遠端命令:
    ssh username@hostname 'ls -l /var/www'
    
  5. 使用SCP傳輸文件:
    scp local_file.txt username@hostname:/path/to/remote/directory/
    
  6. 設置SSH配置文件:
    ~/.ssh/config 文件中新增常用連接設置,簡化連接過程。
  7. 本地埠號轉發:
    ssh -L 8080:localhost:80 username@hostname
    
    將本地8080埠號轉發到遠端主機的80埠號。

SSH金鑰管理

  1. 生成SSH密鑰對:
    ssh-keygen -t rsa -b 4096
    
  2. 將公鑰新增到遠端伺服器:
    ssh-copy-id username@hostname
    
  3. 使用ssh-agent管理多個密鑰:
    eval $(ssh-agent)
    ssh-add ~/.ssh/id_rsa
    

實際案例分析

常見的SSH攻擊方式及防護

暴力破解攻擊

攻擊原理:駭客嘗試大量可能的使用者名稱和密碼組合,希望通過反覆嘗試來猜中正確的憑證。

防護措施:

  • 使用高強度密碼:建議使用長度至少12位,包含大小寫字母、數字和特殊字元的複雜密碼。
  • 金鑰認證:使用SSH金鑰對進行認證,而不是密碼。
    ssh-keygen -t rsa -b 4096
    ssh-copy-id user@host
    
  • 使用fail2ban工具:自動偵測和阻擋重複失敗的登入嘗試。
    sudo apt-get install fail2ban
    sudo systemctl enable fail2ban
    

中間人攻擊

攻擊原理:駭客試圖在客戶端和伺服器之間攔截或修改通訊內容,例如修改購物網站。

防護措施:

  • 驗證主機金鑰:首次連線時仔細檢查伺服器的指紋。
  • 使用已知主機檔案:保持 ~/.ssh/known_hosts 檔案更新,並在連線時驗證。
    ssh -o "StrictHostKeyChecking=yes" user@host
    

權限提升攻擊

攻擊原理:攻擊者獲得低權限帳戶後,嘗試利用系統漏洞或錯誤配置來獲得更高的權限,最終達到 root 權限。

防護措施:

  • 定期更新系統和應用程式,修補已知的安全漏洞。
  • 正確設置文件和目錄權限,特別是敏感的系統文件。
  • 限制 sudo 權限,只給予必要的使用者最小權限。

檔案權限錯誤導致的安全問題案例

網站配置文件權限過寬

  • 問題:Apache配置文件設置為全局可讀(644)
  • 風險:敏感訊息(如資料庫密碼)可能被洩露
  • 解決:將權限改為600,只允許root使用者讀寫

使用者主目錄權限過寬

  • 問題:使用者主目錄設置為777
  • 風險:其他使用者可以存取、修改甚至刪除文件
  • 解決:將權限改為700或750,限制其他使用者的存取

結語

作為後端工程師,正確管理文件權限及掌握SSH的使用是不可或缺的。以下統整一些安全要領:

  1. 堅持遵循最小權限原則
  2. 定期審查和更新系統權限
  3. 採用SSH密鑰而非密碼進行認證
  4. 保持系統和軟體的最新狀態

通過認真實施這些安全措施,我們可以大幅提升系統的安全性,為使用者資料和服務提供更好的保護!

同步更新於 Medium


上一篇
系統基礎知識I:大幅提高生產力的好幫手
下一篇
開發環境設置:工欲善其事,必先利其器
系列文
30天轉職馬拉松:從0到Offer的學習計畫13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言